{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 内存映射"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Numpy** 有对内存映射的支持。\n",
    "\n",
    "内存映射也是一种处理文件的方法，主要的函数有：\n",
    "\n",
    "- `memmap`\n",
    "- `frombuffer`\n",
    "- `ndarray constructor`\n",
    "\n",
    "内存映射文件与虚拟内存有些类似，通过内存映射文件可以保留一个地址空间的区域，同时将物理存储器提交给此区域，内存文件映射的物理存储器来自一个已经存在于磁盘上的文件，而且在对该文件进行操作之前必须首先对文件进行映射。\n",
    "\n",
    "使用内存映射文件处理存储于磁盘上的文件时，将不必再对文件执行I/O操作，使得内存映射文件在处理大数据量的文件时能起到相当重要的作用。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## memmap"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "    memmap(filename,\n",
    "           dtype=uint8,\n",
    "           mode='r+'\n",
    "           offset=0\n",
    "           shape=None\n",
    "           order=0)\n",
    "\n",
    "`mode` 表示文件被打开的类型： \n",
    "\n",
    "- `r` 只读\n",
    "- `c` 复制+写，但是不改变源文件\n",
    "- `r+` 读写，使用 `flush` 方法会将更改的内容写入文件\n",
    "- `w+` 写，如果存在则将数据覆盖\n",
    "\n",
    "`offset` 表示从第几个位置开始。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
